package com.example.propertymanagement.entity;

import javax.persistence.*;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.util.Date;

/**
 * Owner：业主实体类，映射到数据库中的 owner 表
 * 该实体类表示小区内的业主信息，包含基本的业主个人信息、房产信息和小区信息。
 */
@Entity  // 表明该类为 JPA 实体类，会被映射为数据库表
@Data  // Lombok 注解，自动生成 getter、setter、toString 等方法
@JsonInclude(JsonInclude.Include.NON_NULL)  // 仅返回非空字段
public class Owner {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;  // 主键ID，自增长

    @ManyToOne(fetch = FetchType.LAZY)  // 一个业主属于一个小区
    @JoinColumn(name = "community_id", nullable = false)  // 外键关联小区表
    @JsonIgnoreProperties({"admins", "buildings", "owners"})
    private Community community;  // 关联的小区信息

    @ManyToOne(fetch = FetchType.LAZY)  // 一个业主可能属于一个房产
    @JoinColumn(name = "property_id")  // 外键关联房产表（可以为空）
    @JsonIgnoreProperties({"admins", "buildings", "owners"})
    private Property property;  // 关联的房产信息
    private String memberName;  // 业主名称
    private String memberPhoto;  // 业主照片路径（存储照片的URL）
    private String idCard;  // 身份证号，存储业主的身份证号码
    private String contactPhone;  // 联系电话，用于与业主联系
    private String occupation;  // 职业，记录业主的职业信息
    private Date birthDate;  // 出生日期，记录业主的出生日期
    private String gender;  // 性别，记录业主的性别
    private Integer memberType;  // 成员类型：1:业主，2:家属
    private String remark;  // 备注，用于存储额外的信息
    private Date createTime;  // 创建时间，记录该业主信息的创建时间
}